package com.love.usedcar.service.impl;

import java.util.List;

import com.love.common.core.constant.SecurityConstants;
import com.love.common.core.domain.R;
import com.love.common.core.utils.DateUtils;
import com.love.common.core.utils.bean.BeanUtils;
import com.love.common.core.utils.snow.SnowflakeIdGenerator;
import com.love.common.security.utils.SecurityUtils;
import com.love.system.api.RemoteUserService;
import com.love.system.api.model.LoginUser;
import com.love.usedcar.domain.UsedCarCarConfig;
import com.love.usedcar.mapper.UsedCarCarConfigMapper;
import com.love.usedcar.mapper.UsedCarConfigMapper;
import com.love.usedcar.vo.LoveUsedCarVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.love.usedcar.mapper.LoveUsedCarMapper;
import com.love.usedcar.domain.LoveUsedCar;
import com.love.usedcar.service.ILoveUsedCarService;

/**
 * 二手车中心Service业务层处理
 * 
 * @author love
 * @date 2025-10-01
 */
@Service
public class LoveUsedCarServiceImpl implements ILoveUsedCarService 
{
    @Autowired
    private LoveUsedCarMapper loveUsedCarMapper;
    @Autowired
    private UsedCarCarConfigMapper usedCarCarConfigMapper;
    @Autowired
    private UsedCarConfigMapper usedCarConfigMapper;
    @Autowired
    private RemoteUserService remoteUserService;
    //引用雪花算法
    private final SnowflakeIdGenerator idGenerator = new SnowflakeIdGenerator(2, 2);

    /**
     * 查询二手车中心
     * 
     * @param carId 二手车中心主键
     * @return 二手车中心
     */
    @Override
    public LoveUsedCarVo selectLoveUsedCarByCarId(Long carId)
    {
        LoveUsedCar loveUsedCar = loveUsedCarMapper.selectLoveUsedCarByCarId(carId);
        LoveUsedCarVo vo = new LoveUsedCarVo();
        BeanUtils.copyProperties(loveUsedCar, vo); // 复制所有同名同类型字段
        List<String> configNames = this.usedCarConfigMapper.selectConfigNamesByCarId(loveUsedCar.getCarId());
        if(!configNames.isEmpty()){
            String[] configNamesArray = configNames.toArray(new String[0]);
            vo.setConfigNames(configNamesArray);
        }
        return vo;
    }

    /**
     * 查询二手车中心列表
     * 
     * @param loveUsedCar 二手车中心
     * @return 二手车中心
     */
    @Override
    public List<LoveUsedCar> selectLoveUsedCarList(LoveUsedCar loveUsedCar)
    {
        return loveUsedCarMapper.selectLoveUsedCarList(loveUsedCar);
    }

    /**
     * 新增二手车中心
     * 
     * @param loveUsedCar 二手车中心
     * @return 结果
     */
    @Override
    public int insertLoveUsedCar(LoveUsedCar loveUsedCar)
    {
        loveUsedCar.setCarId(idGenerator.nextId());
        LoginUser currentUser = SecurityUtils.getLoginUser();
        // 查询用户信息
        Long userId = currentUser.getUserid(); // 获取用户ID
        R<LoginUser> sysUser = remoteUserService.userId(userId, SecurityConstants.INNER);
        String nickName = sysUser.getData().getSysUser().getNickName();
        loveUsedCar.setUserId(userId);
        loveUsedCar.setNickName(nickName);
        loveUsedCar.setCreateTime(DateUtils.getNowDate());
        if(loveUsedCar.getConfigIds()!=null){
            UsedCarCarConfig usedCarCarConfig = new  UsedCarCarConfig();
            usedCarCarConfig.setCarId(loveUsedCar.getCarId());
            usedCarCarConfig.setCreateTime(DateUtils.getNowDate());
            for(Long configId:loveUsedCar.getConfigIds()){
                usedCarCarConfig.setConfigId(configId);
                usedCarCarConfigMapper.insertUsedCarCarConfig(usedCarCarConfig);
            }
        }
        return loveUsedCarMapper.insertLoveUsedCar(loveUsedCar);
    }

    /**
     * 修改二手车中心
     * 
     * @param loveUsedCar 二手车中心
     * @return 结果
     */
    @Override
    public int updateLoveUsedCar(LoveUsedCar loveUsedCar)
    {
        loveUsedCar.setUpdateTime(DateUtils.getNowDate());
        if(loveUsedCar.getConfigIds()!=null){
            usedCarCarConfigMapper.deleteUsedCarCarConfigByCarID(loveUsedCar.getCarId());
            UsedCarCarConfig usedCarCarConfig = new  UsedCarCarConfig();
            usedCarCarConfig.setCarId(loveUsedCar.getCarId());
            usedCarCarConfig.setCreateTime(DateUtils.getNowDate());
            for(Long configId:loveUsedCar.getConfigIds()){
                usedCarCarConfig.setConfigId(configId);
                usedCarCarConfigMapper.insertUsedCarCarConfig(usedCarCarConfig);
            }
        }
        return loveUsedCarMapper.updateLoveUsedCar(loveUsedCar);
    }

    /**
     * 批量删除二手车中心
     * 
     * @param carIds 需要删除的二手车中心主键
     * @return 结果
     */
    @Override
    public int deleteLoveUsedCarByCarIds(Long[] carIds)
    {
        return loveUsedCarMapper.deleteLoveUsedCarByCarIds(carIds);
    }

    /**
     * 删除二手车中心信息
     * 
     * @param carId 二手车中心主键
     * @return 结果
     */
    @Override
    public int deleteLoveUsedCarByCarId(Long carId)
    {
        return loveUsedCarMapper.deleteLoveUsedCarByCarId(carId);
    }

    /**
     * 小程序端查询二手车中心列表
     *
     * @param loveUsedCarVo 二手车中心
     * @return 二手车中心
     */
    @Override
    public List<LoveUsedCarVo> selectLoveUsedCarList1(LoveUsedCarVo loveUsedCarVo)
    {
        return loveUsedCarMapper.selectLoveUsedCarList1(loveUsedCarVo);
    }
}
